# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python
from cerbero.tools.libtool import LibtoolLibrary


class Recipe(recipe.Recipe):
    version = '20191217-2245'
    name = 'x264'
    licenses = [License.GPLv2Plus]
    stype = SourceType.TARBALL
    configure_tpl = "%(config-sh)s --prefix=%(prefix)s "\
                    "--libdir=%(libdir)s"
    configure_options = '--enable-shared --enable-static --enable-pic ' \
                        '--disable-strip --disable-lavf'
    url = 'https://download.videolan.org/pub/x264/snapshots/x264-snapshot-%(version)s-stable.tar.bz2'
    tarball_dirname= 'x264-snapshot-%(version)s-stable'
    tarball_checksum = 'b2495c8f2930167d470994b1ce02b0f4bfb24b3317ba36ba7f112e9809264160'

    files_libs = ['libx264']
    files_bins = ['x264']
    files_devel = ['lib/pkgconfig/x264.pc', 'include/x264.h',
                   'include/x264_config.h']

    def prepare(self):
        # clang x86-32 fails at generating proper asm PIC code
        # See bug https://bugzilla.gnome.org/show_bug.cgi?id=727079
        enable_asm = True
        AS = ['nasm']

        arch = self.config.target_arch
        if self.config.target_arch == Architecture.X86:
            arch = 'i686'
        if Architecture.is_arm(self.config.target_arch):
            cc = self.get_env('CC')
            if cc:
                AS = [cc]
            else:
                AS = []
        if self.config.target_platform == Platform.IOS:
            if Architecture.is_arm(self.config.target_arch):
                # x264 ships its own gas-preprocessor.pl
                AS = ['tools/' + self.get_env('GAS')]
                self.patches = ['x264/0001-Disable-fembed-bitcode-incompatible-argument.patch']
            elif self.config.target_arch == Architecture.X86:
                enable_asm = False

        if self.config.target_platform == Platform.ANDROID:
            v = DistroVersion.get_android_api_version(self.config.target_distro_version)
            # Don't build the cli on Android, it fails with NDK 16
            self.configure_options += ' --disable-cli'
            self.files_bins.remove('x264')
            if self.config.target_arch in [Architecture.X86_64]:
                # Fails linking into an android application
                enable_asm = False
            elif self.config.target_arch in [Architecture.X86] and v < 24:
                # passing -mstackrealign consumes an extra register and will
                # fail compliation.
                # https://github.com/android-ndk/ndk/issues/690
                # https://github.com/android-ndk/ndk/issues/693
                enable_asm = False

        self.set_env('AS', *AS)
        if enable_asm is False:
            self.configure_options += ' --disable-asm '

    def post_install(self):
        libtool_la = LibtoolLibrary('x264', 148, None, None, self.config.libdir,
                self.config.target_platform)
        libtool_la.save()
        super().post_install()
